var kekeEditor = (function(win){
function keEdtor(id){
	this.id = id;
};
		
keEdtor.prototype = {
	constructor:kekeEditor,
	iframeDom:null,
	events:function(){
		var boxDom = this.template();
	},
	template:function(){
		var $ed = this;
		var editoBox =dom($ed.id);
		//编辑区区域
		var editorDom = $ed.createDiv("ke_editor");
		//按钮区域
		var btnDomWrap = $ed.createDiv("ke_editor_btn");
		//按钮包裹区域
		var btonDom  = $ed.createDiv("ke_btnwrap");
		
		//内容区域
		var cntDom = $ed.createDiv("ke_editor_cnt");
		
		var iframe=document.createElement("iframe");
		iframe.id = "ke_"+$ed.id+"_editor";
		iframe.width=dom($ed.id).offsetWidth-2;
		iframe.height=dom($ed.id).offsetHeight<100?96:dom($ed.id).offsetHeight ;
		iframe.scrolling="yes";
		iframe.className = "ke_editor_iframe";
		iframe.frameborder ="0";
		iframe.src="proxy.html?tid="+$ed.id;
		iframe.frameborder = 0;
		
		//窗口改变随着更改
		window.onresize = function(){
			clearTimeout(this.editorTimer);
			this.editorTimer = setTimeout(function(){
				changeSize();
			},200);
		};
		cntDom.appendChild(iframe);
		editorDom.appendChild(btnDomWrap);
		editorDom.appendChild(cntDom);
		editoBox.appendChild(editorDom);
		//缓存iframeDom对象到对象中，确保每次操作的iframe都是自己的
		$ed.iframeDom = iframe;
		//追加按钮
		$ed.buttons.forEach(function(option){
			btonDom.appendChild($ed.createButton(option));
		});
		btnDomWrap.appendChild(btonDom);
		//tip提示初始化
		$(".tmui-tips").tmTip();
		return editoBox;
	},
	createDiv:function(className){
		var editorDom = document.createElement("div");
		editorDom.className = className;
		return editorDom;
	},
	createButton:function(opts){
		var adom = document.createElement("a");
		adom.className = "keditor-"+opts.ele+" tmui-tips";
		adom.title = opts.title;
		adom.tip = opts.title;
		adom.href = "javascript:void(0);";
		adom.innerHTML = "<i class='fa fa-"+opts.ele+"'></i>";
		adom.iwindow = this.iframeDom.contentWindow;
		adom.onclick =function(){
			this.iwindow.document.body.focus();//编辑器获取jiaodian
			if(opts.callback)opts.callback.call(this,opts);
		};
		return adom;
	},
	buttons:[
//	   {ele:"code",title:"源代码",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   this.iwindow.changeArea();
//		   this.children[0].style.fontWeight = 700;
//	   }},
	   {ele:"bold",title:"加粗",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("Bold");
	   }},
//	   {ele:"italic",title:"斜体",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("Italic");
//	   }}, 
	   {ele:"underline",title:"下划线",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("Underline");
	   }},
//	   {ele:"strikethrough",title:"删除线",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("StrikeThrough");
//	   }},
//	   {ele:"text-height",title:"字体大小",callback:function(opts){//需要弹出框框
//		   var wdom = this.iwindow.document;
//		   var ul = document.createElement("ul");
//		   ul.style.position = "absolute";
//		   ul.style.left = "-8px";
//		   ul.style.padding = "0 16px";
//		   ul.style.background = "#EEEEEE";
//		   var sizeArr = [10,13,16,19,22,25,28];
//		   for(var i=1;i<=7;i++){
//			   var li  = document.createElement("li");
//			   li.innerHTML = sizeArr[i-1]+"px";
//			   li.style.fontSize = sizeArr[i-1]+"px";
//			   li.style.textAlign = "left";
//			   li.style.lineHeight = "28px";
//			   li.fsize = i;
//			   li.onclick = function(e){
//				   wdom.execCommand("fontSize",false,this.fsize+"em");
//				   this.parentElement.parentElement.removeChild(this.parentElement);
//				   stopBubble(e);
//			   };
//			   ul.appendChild(li);
//		   }
//		   
//		   this.appendChild(ul);
//		   this.onmouseleave = function(e){
//			   try{
//				   if(ul)this.removeChild(ul);
//				   stopBubble(e);
//			   }catch(e){}
//		   };
//	   }}, 
//	   {ele:"font",title:"字体风格",callback:function(opts){//需要弹出框框
//		   var wdom = this.iwindow.document;
//		   var ul = document.createElement("ul");
//		   ul.style.position = "absolute";
//		   ul.style.left = "-8px";
//		   ul.style.padding = "0 16px";
//		   ul.style.background = "#EEEEEE";
//		   
////		   var sizeArr = ["微软雅黑","宋体","黑体","楷体","Arial","Verdana","Georgia","Times New Roman","Microsoft JhengHei","Trebuchet MS","Courier New","Impact","Comic Sans MS"];
//		   var sizeArr = ["微软雅黑","宋体","Arial","Verdana","Georgia","Times New Roman","Microsoft JhengHei","Trebuchet MS","Courier New","Impact","Comic Sans MS"];
//		   for(var i=0;i<=sizeArr.length;i++){
//			   var li  = document.createElement("li");
//			   li.innerHTML = sizeArr[i];
//			   li.style.fontFamily = sizeArr[i];
//			   li.style.textAlign = "left";
//			   li.fontf = sizeArr[i];
//			   li.onclick = function(e){
//				   wdom.execCommand("fontName",false,this.fontf);
//				   this.parentElement.parentElement.removeChild(this.parentElement);
//				   stopBubble(e);
//			   };
//			   ul.appendChild(li);
//		   }
//		   this.appendChild(ul);
//		   this.onmouseleave = function(e){
//			   try{
//				   if(ul)this.removeChild(ul);
//				   stopBubble(e);
//			   }catch(e){}
//		   };
//	   }},
	   {ele:"tint",title:"颜色",callback:function(opts){//需要改变用弹出框框
		   var wdom = this.iwindow.document;
		   wdom.execCommand("foreColor",false,"red");
	   }},
//	   {ele:"header",title:"标题",callback:function(opts){//需要弹出框框
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("heading",false,"H1");
//	   }},
	   {ele:"list-ol",title:"有序列表",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("indent");
		   wdom.execCommand("insertOrderedList");
	   }},
	   {ele:"list-ul",title:"无序列表",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("indent");
		   wdom.execCommand("insertUnorderedList");
	   }},
	   {ele:"indent",title:"缩进",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("indent");
	   }},
	   {ele:"outdent",title:"取消缩进",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("outdent");
	   }},
	   {ele:"align-left",title:"居左",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("justifyLeft");
	   }},
	   {ele:"align-center",title:"居中",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("justifyCenter");
	   }},
	   {ele:"align-right",title:"居右",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("justifyRight");
	   }},
	   {ele:"align-justify",title:"两端对齐",callback:function(opts){
		   var wdom = this.iwindow.document;
		   wdom.execCommand("justifyFull");
	   }},
//	   {ele:"undo",title:"撤销",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("undo");
//	   }},
//	   {ele:"repeat",title:"回退撤销",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("redo");
//	   }},
//	   {ele:"link",title:"链接地址",callback:function(opts){//特殊处理的元素,需要弹出框框
//		   var wdom = this.iwindow.document;
//		   var divDom = document.createElement("div");
//		   divDom.className = "keditor_linkbox";
//		   divDom.innerHTML = "<p><label>名称：</label><span><input type='text' placeholder='请输入链接名称' class='einp'/></span></p><p><label>链接：</label><span><input type='text' class='einp'/></span></p>" +
//		   		"<p><input type='button' value='确定' class='fr ebtn'/></p>" ;
//		   this.appendChild(divDom);
//		   
//		   
//		   
////		   wdom.execCommand("createLink",false,"http://blog.csdn.net/u011043843");
//	   }},
//	   {ele:"unlink",title:"撤销链接",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("unlink");
//	   }},
	   {ele:"paragraph",title:"段落",callback:function(opts){//特殊处理的元素,需要弹出框框
		   var wdom = this.iwindow.document;
		   wdom.execCommand("insertParagraph",false);
	   }},
//	   {ele:"copy",title:"复制",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("copy");
//	   }},
//	   {ele:"cut",title:"剪切",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("cut");
//	   }},
//	   {ele:"paste",title:"粘贴",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("paste");
//	   }},
//	   {ele:"subscript",title:"下标",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("subscript");
//	   }},
//	   {ele:"superscript",title:"上标",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("superscript");
//	   }},
//	   {ele:"scissors",title:"删除选中区域",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("delete");
//	   }},
//	   {ele:"file",title:"全选内容",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("selectAll");
//	   }},
	   {ele:"video-camera",title:"音频",callback:function(opts){//特殊处理的元素,需要弹出框框
		   var wdom = this.iwindow.document;
		   wdom.execCommand("StrikeThrough");
	   }},
	   {ele:"file-picture-o",title:"图像",callback:function(opts){//特殊处理的元素,需要弹出框框
		   var wdom = this.iwindow.document;
		   wdom.execCommand("insertImage",false,"http://7xkszy.com2.z0.glb.qiniucdn.com/pics/vol/56a9091dcacf1.jpg");
	   }}
//	   {ele:"html5",title:"源代码",callback:function(opts){
//		   var wdom = this.iwindow.document;
//		   wdom.execCommand("html");
//	   }},
//	   {ele:"arrows",title:"全屏",callback:function(opts){//全屏
//		   var wdom = this.iwindow.document;
//		   var editorBox = this.parentElement.parentElement.parentElement.parentElement;
//		   if(this.className.indexOf("keditor-arrows-alt")==-1){
//			   editorBox.style.position="fixed";
//			   editorBox.style.width = "100%";
//			   editorBox.style.height = "100%";
//			   editorBox.style.top = "0";
//			   editorBox.style.left= "0";
//			   editorBox.style.zIndex = "99999";
//			   editorBox.style.margin = "2px";
//			   editorBox.className += "animated bounceIn";
//			   this.className ="keditor-arrows-alt tmui-tips";
//			   this.tip = "退出全屏";
//			   document.documentElement.style.overflowY='hidden';
//			   document.body.style.overflowY="hidden";
//			   this.children[0].className = "fa fa-arrows-alt";		   	
//			   changeSize();
//		   }else{
//			   editorBox.removeAttribute("style");
//			   this.className ="keditor-arrows tmui-tips";
//			   this.tip = "全屏";
//			   document.documentElement.style.overflowY='auto';
//			   document.body.style.overflowY="auto";
//			   changeSize();
//			   editorBox.className = editorBox.className.replace("animated bounceIn","");
//			   this.children[0].className = "fa fa-arrows";		   	 
//		   }
//	   }}
	]
};

function changeSize(){
	domClass(document.body,"ke_editor_iframe").forEach(function(obj){
		obj.width = obj.parentElement.parentElement.parentElement.offsetWidth-4;
		obj.height = obj.parentElement.parentElement.parentElement.offsetHeight-40;
	});
}

return keEdtor;
})(window)
	

	
//document.onreadystatechange = function () {
//	console.log(document.readyState)
//  if (document.readyState == "complete") {
//    //initApplication();
//  }
//};















//
////	window.onload = function(){
//		//dom("baidu_editor_0").contentWindow.document.head.innerHTML = "<style>body{font-size:14px;font-family:'微软雅黑';}</style>";
//		//dom("baidu_editor_0").contentWindow.document.body.innerHTML = "以上的代码可以捕获到选中的网页中的纯文本内容(不含HTML标签) 如果想获得包含html的内容，将document.selection.createRange().text改成document.selection.createRange().htmlText";
//		
//		/*
//		dom("weight").onclick = function(){
//			var wdom = dom("baidu_editor_0").contentWindow.document;
//			wdom.execCommand("Bold");
//		}
//
//		dom("cweight").onclick = function(){
//			var wdom = dom("baidu_editor_0").contentWindow.document;
//			//wdom.execCommand("undo");
//
//			//wdom.execCommand('BackColor',true,'#FFbbDD');
//			//wdom.execCommand("StrikeThrough",false,null);
//		//	wdom.execCommand("Underline",false,null);
//		//	wdom.execCommand("Italic",false,null);
//			
//			wdom.execCommand("heading",false,"H3");
//		}*/
////	};
//
//	
//
//	function getHtml(win){ 
//	  if (win.getSelection) { 
//		 var range=win.getSelection().getRangeAt(0); 
//		 var container = win.document.createElement('div'); 
//		 container.appendChild(range.cloneContents()); 
//		 return container.innerHTML; 
//	  }else if (win.document.getSelection) { 
//		 var range=win.getSelection().getRangeAt(0); 
//		 var container = win.document.createElement('div'); 
//		 container.appendChild(range.cloneContents()); 
//		 return container.innerHTML; 
//	  } else if (win.document.selection) { 
//		  return win.document.selection.createRange().htmlText; 
//	  } 
//   } 
//	
//	/*
//	var cut = document.getElementById("cut");
//    cut.onclick=function()
//    {
//        alert("您的浏览器安全设置不允许使用剪切操作，请使用键盘快捷键(Ctrl+X)完成");
//    }
//    var copy = document.getElementById("copy");
//    copy.onclick=function()
//    {
//        alert("您的浏览器安全设置不允许使用复制操作，请使用键盘快捷键(Ctrl+C)完成");
//    }
//    var paste = document.getElementById("paste");
//    paste.onclick=function()
//    {
//        alert("您的浏览器安全设置不允许使用粘贴操作，请使用键盘快捷键(Ctrl+V)完成");
//    }
//
//    var special = document.getElementById("special");
//    var specialDiv = document.getElementById("specialDiv");
//    special.onmouseover=function()
//    {
//        specialDiv.style.display = "block";
//        paraUl.style.display = "none";
//        fontUl.style.display = "none";
//        sizeUl.style.display="none";
//        fontColorDiv.style.display="none";
//        bgColorDiv.style.display="none";
//        duiqiUl.style.display = "none";
//        liebiaoUl.style.display = "none";
//        setLDiv.style.display="none";
//        tuDiv.style.display="none";
//        bqDiv.style.display="none";
//        bgDiv.style.display="none";
//        codeDiv.style.display="none";
//        yyDiv.style.display="none";
//    }
//    */
//    
//	//http://blog.csdn.net/woshinia/article/details/18664903
//	//https://developer.mozilla.org/zh-CN/docs/Web/API/Document/execCommand
//	//http://www.tuicool.com/articles/QrQB3e
//	/*
//	*第二个参数最好不要设置为TRUE，否则可能会执行不了
//	*/
//	//加粗
//	function jiacu()
//	{
//	    document.execCommand("Bold",false,null);
//	}
//	//斜体
//	function xieti()
//	{
//	    document.execCommand("Italic",false,null);
//	}
//	//下划线
//	function xiahua()
//	{
//	    document.execCommand("Underline",false,null);
//	}
//	//删除线
//	function shanchu()
//	{
//	    document.execCommand("StrikeThrough",false,null);
//	}
//
//	//设置字体
//	function setFontName(param)
//	{
//	    document.execCommand("FontName",false,param);
//	    document.getElementById("fontUl").style.display="none"; 
//	}
//	//设置字体大小
//	function setFontSize(param)
//	{
//	    document.execCommand("FontSize",false,param);
//	    document.getElementById("sizeUl").style.display="none"; 
//	}
//	//设置字体颜色
//	function setFontColor(param)
//	{
//	    document.execCommand("ForeColor",false,param)
//	    document.getElementById("fontColor1").style.display="none"; 
//	}
//	//设置背景颜色
//	function setBackColor(param)
//	{
//	    document.execCommand("BackColor",false,param)
//	    document.getElementById("bgColor1").style.display="none"; 
//	}
//	//删除文字格式
//	function removeFormat()
//	{
//	    document.execCommand("RemoveFormat",false,null);
//	}
//	//对齐方式
//	function duiqiway(param)
//	{
//	    document.execCommand(param,false,null);
//	    document.getElementById("duiqiUl").style.display="none"; 
//	}
//	//插入列表
//	function insertList(param)       //不能实现
//	{
//	    document.execCommand(param,false,null);
//	    document.getElementById("liebiaoUl").style.display="none"; 
//	}
//	//改变缩进
//	function changeIndent(param)    //不能实现
//	{
//	    document.execCommand(param,false,null);
//	    alert("暂时未实现");
//	}
//	//链接                           //不能实现,取消链接的命令只用于用createLink命令创建的链接
//	function setLink(param)
//	{
//	    document.execCommand(param,false,"http://blog.csdn.net/u011043843"); //第三个参数为URL
//	    alert("暂时未实现");
//	}
//	//表情
//	function insertBQ(param)
//	{
//	    document.execCommand("InsertImage",false,param);   //param为图片的url  
//	    document.getElementById("bqDiv").style.display="none"; 
//	}
//
//	//段落
//	function parag(param)
//	{
//	    document.execCommand("formatBlock",false,param);
//	    document.getElementById("paraUl").style.display="none";
//	}
//
//
//   /*
//   backColor
//改变文档的背景颜色。 在styleWithCss模式，它影响的是包含元素的背景。 这个命令要求提供一个颜色值作为第三个参数 (Internet Explorer 使用这个命令设置文本背景色)
//bold
//对选中文本或者插入元素设置、取消粗体显示. (Internet Explorer 使用STRONG 标签 而不是 B标签。)
//contentReadOnly
//转化文档进入只读或者可编辑模式. 这个命令要求提供给一个boolean值给第3个参数(ie不支持)。
//copy
//把当前选中区域复制到系统剪贴板。使用这个命令需要首先在 user.js 接口中进行激活。
//createLink
//当有选中区域的时候，使用这个命令转化选中区域为一个锚点，需要提供一个URI给第3个参数. 这个URI必须至少包含一个字符，空白字符也可。(Internet Explorer 会创建一个URI为空的a标签)
//cut
//剪切选中文本到剪切板. 同copy一样需要开启剪切板功能。
//decreaseFontSize
//给选中文本或者插入元素添加一个small标签。(Internet Explorer不支持)
//delete
//删除当前选中区域
//enableInlineTableEditing
//开启或禁用表的行和列的插入删除功能 ( Internet Explorer不支持)
//enableObjectResizing
//开启或禁用图片或者其他可resize元素的resize功能 ( Internet Explorer不支持)
//fontName
//改变选中文本或者插入元素的字体。需要给第3个参数提供一个字体值
//fontSize
//改变选中文本或者插入元素的字体大小。需要给第3个参数提供一个数字
//foreColor
//改变选中文本或者插入元素的字体颜色。需要给第3个参数提供一个颜色值
//formatBlock
//向当前选择的区域所在的行添加一个HTML块标记，如果这行上已经存在了其它块标记，会被添加的标记替换掉（在Firefox中，BLOCKQUOTE标记是一个例外，他会把已有的块元素包含在内）。需要给第三个参数提供一个标记的名字。事实上几乎所有块标记都是可以使用的（如“H1”、“P”、“DL”、“BLOCKQUOTE”）。（Internet Explorer只支持标题标记H1-H6、ADDRESS和PRE标记，且必须用标记分隔符< >将标记括起来，例如应当写成"<H1>"。）
//forwardDelete
//删除光标前的字符。这个效果和按了Delete键一样。
//heading
//向选取的文字或者插入点添加一个标题标记。需要标记名作为第3个参数（如"H1","H6"）。（不被Internet Explorer支持。）
//hiliteColor
//改变区或者插入点的背景色。需要传入颜色值作为第3个参数。要使用这个方法，UseCSS必须被打开。（不被Internet Explorer支持。）
//increaseFontSize
//向选区或者插入点添加一个BIG标记。（不被Internet Explorer支持。）
//indent
//缩进选区或者插入点所在的行。 在Firefox中，如果选区包含带有不同级别缩进的多行，只有选区中缩进最低的行会被缩进。
//insertBrOnReturn
//控制按下回车键的行为：是插入一个BR标记还是将当前块拆分为两个。 （不被Internet Explorer支持。）
//insertHorizontalRule
//在选区或者插入点上插入一个水平线（会删除选区内容）。
//insertHTML
//在选区或者插入点上插入一段HTML代码段 （会删除选区内容）。需要传入一个有效的HTML代码段作为第3个参数。 （不被Internet Explorer支持。）
//insertImage
//在选区或者插入点上插入图像（会删除选区内容）。需要传入有效的图像SRC URI字串作为第3个参数。URI必须至少包含一个字符，可以是空格。 （Internet Explorer会在传入URI为null值时建立一个链接。）
//insertOrderedList
//在选区或者插入点建立一个有序列表。
//insertUnorderedList
//在选区或者插入点建立一个无序列表。
//insertParagraph
//在选区或者插入点上产生一个段落（p标记）。 （Internet Explorer会在插入点上插入一个段落的同时删除选区内容。）
//insertText
//在选区或者插入点上插入一段纯文本 （会删除选区内容）。
//italic
//为选区或者插入点开关斜体。 （Internet Explorer会使用EM标记，而不是I标记。）
//justifyCenter
//使选区或者插入点所在块居中。
//justifyFull
//使选区或者插入点所在块文本两端对齐。
//justifyLeft
//使选区或者插入点所在块居左。
//justifyRight
//使选区或者插入点所在块居右。
//outdent
//去除选取或者插入点所在行的一个缩进。
//paste
//在选区或者插入点粘贴剪切板中的文字。（会替换当前选区的文本）。需要在user.js中打开剪切板功能。
//redo
//撤销之前的撤销（undo）操作。
//removeFormat
//删除当前选取上的所有格式。
//selectAll
//全选可编辑的所有内容。
//strikeThrough
//开启或关闭选区或者插入点的删除线。
//subscript
//开启或关闭选区或者插入点的上标功能。
//superscript
//开启或关闭选区或者插入点的下标功能。
//underline
//开启或关闭选区或者插入点的下划线功能。
//undo
//撤销上一个操作。
//unlink
//删除选取的超链接文本的超链接标记。
//useCSS 
//开启或关闭使用HTML标记或者CSS来生成标记。 需要传入一个boolean值作为第3个参数。 注意：这个参数逻辑上相反，false表示使用CSS，true表示使用HTML。 （不被Internet Explorer支持。）这个方法已经被废弃，请使用styleWithCSS方法替代。
//styleWithCSS
//用于替换 useCSS 方法。它的参数符合想象，即true表示用CSS来修饰或者生成标记，false表示用HTML格式标记来实现富文本格式。
//   */